use std::fs;
use std::io;
use std::path::Path;
use std::io::Write;

pub fn execute(args: &[String]) {
    if args.is_empty() {
        eprintln!("用法: rm [-r] [-i] [-f] <文件或目录名>");
        return;
    }

    let mut recursive = false; // 是否递归删除
    let mut interactive = false; // 是否启用交互模式
    let mut force = false; // 是否强制删除
    let mut targets = vec![]; // 要删除的目标列表

    // 解析命令行参数
    for arg in args {
        match arg.as_str() {
            "-r" | "--recursive" => recursive = true,
            "-i" => interactive = true,
            "-f" | "--force" => force = true,
            _ => targets.push(arg), // 其他参数视为要删除的目标
        }
    }

    // 执行删除操作
    for target in &targets {
        let path = Path::new(target);

        // 如果路径不存在且不使用强制模式，打印错误
        if !path.exists() {
            if !force {
                eprintln!("错误: 文件或目录 '{}' 不存在", target);
            }
            continue;
        }

        // 确认是否删除（如果启用了交互模式）
        if interactive && !confirm_deletion(target) {
            println!("跳过: {}", target);
            continue;
        }

        // 执行删除
        if path.is_dir() {
            if recursive {
                // 递归删除目录及其内容
                if let Err(e) = fs::remove_dir_all(path) {
                    eprintln!("无法删除目录 '{}': {}", target, e);
                } else {
                    println!("删除目录: {}", target);
                }
            } else {
                eprintln!("错误: '{}' 是一个目录，使用 -r 进行递归删除", target);
            }
        } else {
            // 删除文件
            if let Err(e) = fs::remove_file(path) {
                eprintln!("无法删除文件 '{}': {}", target, e);
            } else {
                println!("删除文件: {}", target);
            }
        }
    }
}

// 确认是否删除
fn confirm_deletion(target: &str) -> bool {
    print!("确认删除 '{}' 吗? (y/n): ", target);
    io::stdout().flush().unwrap(); // 刷新输出缓冲区

    let mut input = String::new();
    io::stdin().read_line(&mut input).unwrap();
    matches!(input.trim(), "y" | "Y")
}
